import java.util.Random;

public class Player {
    private String username; // 用户名
    private String password; // 密码
    private Pet[] pets; // 玩家的宠物数组，最多三个
    private int petCount; // 当前拥有的宠物数量
    private int money; // 玩家持有的货币
    private boolean canSignIn; // 签到状态，true表示可以签到
    
    // 构造方法
    public Player(String username, String password) {
        this.username = username;
        this.password = password;
        this.pets = new Pet[3]; // 最多三个宠物
        this.petCount = 0;
        this.money = 100; // 初始货币
        this.canSignIn = true; // 初始化为可以签到
    }
      // 登录方法
    public boolean login(String username, String password) {
        return this.username.equals(username) && this.password.equals(password);
    }
    
    // 获取用户名
    public String getUsername() {
        return username;
    }
    
    // 显示用户信息
    public void showInfo() {
        System.out.println("用户名: " + username);
    }
    
    // 开始游戏，领养第一个宠物
    public void startGame(Pet selectedPet) {
        if (petCount >= 3) {
            System.out.println("你已经领养了三个宠物，不能再领养其他宠物！");
            return;
        }
        
        // 添加宠物到数组
        pets[petCount] = selectedPet;
        petCount++;
        
        System.out.println("你已成功领养 " + selectedPet.getName() + "！");
        System.out.println("开始照顾你的宠物吧！");
    }    // 通过名称放生宠物
    public void releasePetByName(String petName) {
        if (petCount == 0) {
            System.out.println("你还没有领养任何宠物！");
            return;
        }
        
        boolean found = false;
        int petIndex = -1;
        
        // 使用循环查找指定名称的宠物
        for (int i = 0; i < petCount; i++) {
            if (pets[i] != null && pets[i].getName().equals(petName)) {
                found = true;
                petIndex = i;
                break;
            }
        }
        
        if (!found || petIndex == -1) {
            System.out.println("未找到名为 " + petName + " 的宠物！");
            return;
        }
        
        // 将后面的宠物向前移动
        for (int i = petIndex; i < petCount - 1; i++) {
            pets[i] = pets[i + 1];
        }
        
        pets[petCount - 1] = null; // 清空最后一个位置
        petCount--;
        
        System.out.println("你已经放生了 " + petName + "，它已经回归自然了。");
        if (petCount > 0) {
            System.out.println("你还有 " + petCount + " 个宠物。");
        } else {
            System.out.println("现在你可以领养或抽取新的宠物了。");
        }      }
    
    // 抽取宠物
    public void drawPet() {
        if (petCount >= 3) {
            System.out.println("你已经有三个宠物了！不能再抽取新宠物。");
            System.out.println("如果想要新宠物，请先放生一个当前的宠物。");
            return;
        }
        
        if (money < 50) {
            System.out.println("货币不足，无法抽取宠物！需要50货币。");
            return;
        }
        
        money -= 50; // 抽奖消耗50货币
        Random random = new Random();
        int result = random.nextInt(100);
        
        Pet newPet = null;
        
        if (result < 10) { // 10%概率获得钟离
            newPet = new Zhongli("钟离");
            System.out.println("恭喜！你抽到了稀有角色：钟离！");
        } else if (result < 25) { // 15%概率获得胡桃
            newPet = new Hutao("胡桃");
            System.out.println("恭喜！你抽到了稀有角色：胡桃！");
        } else if (result < 50) { // 25%概率获得刻晴
            newPet = new Keqing("刻晴");
            System.out.println("恭喜！你抽到了角色：刻晴！");
        } else { // 50%概率获得派蒙
            newPet = new Paimeng("派蒙");
            System.out.println("你抽到了角色：派蒙！");
        }
        
        // 添加新宠物到数组
        pets[petCount] = newPet;
        petCount++;
        
        System.out.println("已将新角色添加到你的账户中！");
    }
      // 通过名称显示宠物状态
    public void showPetStatusByName(String petName) {
        if (petCount == 0) {
            System.out.println("你还没有领养宠物，无法显示宠物状态！");
            return;
        }
        
        boolean found = false;
        int petIndex = -1;
        Pet targetPet = null;
        
        // 使用循环查找指定名称的宠物
        for (int i = 0; i < petCount; i++) {
            if (pets[i] != null && pets[i].getName().equals(petName)) {
                found = true;
                petIndex = i;
                targetPet = pets[i];
                break;
            }
        }
        
        if (!found || targetPet == null) {
            System.out.println("未找到名为 " + petName + " 的宠物！");
            return;
        }
        
        System.out.println("玩家: " + getUsername());
        System.out.println("宠物: " + targetPet.getName() + " (宠物 " + (petIndex + 1) + "/" + petCount + ")");
        System.out.println("货币: " + money);
        System.out.println("宠物存活天数: " + targetPet.getAge());
          // 显示好感度
        if (targetPet instanceof Zhongli) {
            System.out.println("好感度: " + ((Zhongli) targetPet).getLove() + "/100");
        } else if (targetPet instanceof Hutao) {
            System.out.println("好感度: " + ((Hutao) targetPet).getLove() + "/100");
        } else if (targetPet instanceof Keqing) {
            System.out.println("好感度: " + ((Keqing) targetPet).getLove() + "/100");
        } else if (targetPet instanceof Paimeng) {
            System.out.println("好感度: " + ((Paimeng) targetPet).getLove() + "/100");
        }
        
        // 显示宠物状态
        targetPet.showStatus();    }
    
    // 显示所有宠物列表
    public void showAllPets() {
        if (petCount == 0) {
            System.out.println("你还没有领养任何宠物！");
            return;
        }
        
        System.out.println("玩家: " + getUsername());
        System.out.println("拥有宠物数量: " + petCount + "/3");
        System.out.println("货币: " + money);
        
        for (int i = 0; i < petCount; i++) {
            Pet pet = pets[i];
            
            System.out.println((i + 1) + ". " + pet.getName());
            System.out.println("   存活天数: " + pet.getAge() + "天");
              // 显示好感度
            if (pet instanceof Zhongli) {
                System.out.println("   好感度: " + ((Zhongli) pet).getLove() + "/100");
            } else if (pet instanceof Hutao) {
                System.out.println("   好感度: " + ((Hutao) pet).getLove() + "/100");
            } else if (pet instanceof Keqing) {
                System.out.println("   好感度: " + ((Keqing) pet).getLove() + "/100");
            } else if (pet instanceof Paimeng) {
                System.out.println("   好感度: " + ((Paimeng) pet).getLove() + "/100");
            }
            
            // 显示体力和快乐度            System.out.println("   食物值: " + pet.getFood() + "/100");
            System.out.println("   快乐度: " + pet.getJoy() + "/100");
            
        }
    }
    
    // 睡觉功能
    public void sleep() {
        if (petCount == 0) {
            System.out.println("你还没有领养宠物，无法进行睡觉！");
            return;
        }
        
        // 所有宠物的存活天数都增加
        for (int i = 0; i < petCount; i++) {
            pets[i].addDay();
        }
        
        canSignIn = true; // 睡觉后重置签到状态，可以再次签到
        
        System.out.println("你和你的宠物们度过了一个美好的夜晚。");
        System.out.println("所有宠物的存活天数增加了1天。");
        System.out.println("你现在可以签到领取奖励了！");
    }
    
    // 每日签到功能
    public void signIn() {
        if (!canSignIn) {
            System.out.println("你今天已经签到过了，请先睡觉后再来签到！");
            return;
        }
        
        // 更新签到状态并增加金币
        canSignIn = false;
        money += 200;
        System.out.println("签到成功！获得200金币奖励。");
        System.out.println("当前金币: " + money);
    }
    
    // 获取货币
    public int getMoney() {
        return money;
    }
    
    // 增加货币
    public void addMoney(int amount) {
        this.money += amount;
    }
    
    // 获取宠物数量
    public int getPetCount() {
        return petCount;
    }
    
    // 与指定索引的宠物互动
    public void interactWithPetByIndex(int index) {
        if (petCount == 0) {
            System.out.println("你还没有领养任何宠物，无法互动！");
            return;
        }
        
        if (index < 0 || index >= petCount) {
            System.out.println("无效的宠物索引！");
            return;
        }
        
        // 显示互动选项
        System.out.println("1. 喂食");
        System.out.println("2. 玩耍");
        System.out.println("3. 专属互动");
        System.out.print("请选择互动方式：");
    }
      // 执行与指定名称宠物的特定互动
    public void performInteractionByName(String petName, int interactionType) {
        if (petCount == 0) {
            System.out.println("你还没有领养任何宠物，无法互动！");
            return;
        }
        
        boolean found = false;
        int petIndex = -1;
        Pet targetPet = null;
        
        // 使用循环查找指定名称的宠物
        for (int i = 0; i < petCount; i++) {
            if (pets[i] != null && pets[i].getName().equals(petName)) {
                found = true;
                petIndex = i;
                targetPet = pets[i];
                break;
            }
        }
        
        if (!found || targetPet == null) {
            System.out.println("未找到名为 " + petName + " 的宠物！");
            return;
        }
          // 极低概率的宠物逃跑事件 (1%)
        Random random = new Random();
        if (random.nextInt(100) < 1) {
            // 将后面的宠物向前移动
            for (int i = petIndex; i < petCount - 1; i++) {
                pets[i] = pets[i + 1];
            }
            
            pets[petCount - 1] = null; // 清空最后一个位置
            petCount--;
            
            System.out.println("哎呀！" + petName + " 突然挣脱了你的怀抱，一溜烟跑得无影无踪了！");
            System.out.println("看来它更喜欢自由自在的生活。你需要重新领养或抽取新的宠物。");
            return;
        }
        
        // 执行选择的互动
        if (interactionType == 1) {
            targetPet.feed();
        } else if (interactionType == 2) {
            targetPet.play();
        } else if (interactionType == 3) {
            targetPet.action();
        } else {
            System.out.println("无效的互动选择！");
        }    }
      // 获取指定名称的宠物
    public Pet getPetByName(String petName) {
        for (int i = 0; i < petCount; i++) {
            if (pets[i] != null && pets[i].getName().equals(petName)) {
                return pets[i];
            }
        }
        return null;
    }
    
    // 获取指定索引的宠物
    public Pet getPetByIndex(int index) {
        if (index >= 0 && index < petCount) {
            return pets[index];
        }
        return null;
    }
} 